package ca.etsmtl.log430.lab3.gestion.ifaces;
import java.util.Collection;

import ca.etsmtl.log430.lab3.gestion.Course;
import ca.etsmtl.log430.lab3.gestion.CourseType;
import ca.etsmtl.log430.lab3.gestion.Teacher;
import ca.etsmtl.log430.lab3.gestion.TeacherAssignmentException;
/**
 * 
 * @author samuel
 *
 */
public interface ICommonData {
	/**
	 * 
	 * @return
	 */
	public Collection<ICourse> getListOfCourses();
	
	
	/**
	 * 
	 * @return
	 */
	public Collection<ITeacher> getListOfTeachers();
	
	
	public Collection<ITeacher> findTeacherByCourseIdAndGroup(String courseId,String group);
	
	
	 /**
	  * Cherche 
	  * l'enseignant associ� � ce matricule
	  * @param teacherMatricule
	  * @return
	  */
	 public Collection<ICourse> getListOfCoursesGivenBy(String teacherMatricule);
	 
	 
	 /**
	  * 
	  * @param ids
	  * @return
	  */
	 public Collection<ICourse> getListOfCourseByIds(Collection<String> ids);

	/**
	 * 
	 * @return
	 */
	public Collection<ICourse> getListOfCoursesNotLab();


	/**
	 * 
	 * @param userChoice
	 * @return
	 * @throws  
	 */
	public Teacher findTeacherByID(String userChoice);

	/**
	 * 
	 * @param userChoiceCourseID
	 * @param userChoiceGroup
	 * @param userChoiceActivityType
	 * @return
	 */
	public ICourse findCourseByIDActivityAndGroup(
			String userChoiceCourseID,
			String userChoiceGroup, 
			CourseType userChoiceActivityType);

	/**
	 * 
	 * @param string
	 * @return
	 */
	public ICourse findcoursByID(String string);


	/**
	 * Ajouter une option qui permet d'afficher la liste des cours (pas les laboratoires!) qui 
	 *	n�ont pas �t� encore attribu�s cette session.  (? et laboratoire ).. 
	 * pour l'instant la methode ne retourne que les cours .. pas les laboratoire.. 
	 * @return
	 */
	public Collection<? extends ICourse> getUnAssignedCourses();
	
	
	/**
	 * 
	 * @param teacher
	 * @param course
	 * @throws TeacherAssignmentException
	 */
	public void assignTeacherToCourse(ITeacher teacher, ICourse course) throws TeacherAssignmentException;



}
